package io.adrainty.bolee.file.adapter;

import io.adrainty.bolee.file.models.entity.FileEntity;
import io.adrainty.bolee.file.models.entity.FilePartEntity;

import java.io.InputStream;
import java.util.List;

/**
 * @author AdRainty
 * @version V1.0.0
 * @since 2025/8/17 下午11:56
 */
public interface FileStorageAdapter {

    /**
     * 文件上传
     *
     * @param fileVO      {@link FileEntity} 文件信息对象
     * @param inputStream 文件流
     * @return pathUrl 全路径
     */
    String uploadFile(FileEntity fileVO, InputStream inputStream);

    /***
     * 分片上传-初始化分片请求
     * @param fileVO  {@link FileEntity} 文件信息对象
     * @return uploadId 文件上传id
     */
    FileEntity initiateMultipartUpload(FileEntity fileVO);

    /***
     * 分片上传-上传每个分片文件
     * @param filePartVo  {@link FilePartEntity} 文件信息对象
     * @param inputStream 当前分片文件流
     * @return PartETag json字符串
     */
    String uploadPart(FilePartEntity filePartVo, InputStream inputStream);

    /***
     * 分片上传-合并所有上传文件
     * @param fileVO  {@link FileEntity} 文件信息对象
     * @return 合并结果
     */
    String completeMultipartUpload(FileEntity fileVO);

    /**
     * 下载文件
     *
     * @param storeFlag  存储源标识
     * @param bucketName 资源存储区域名称
     * @param pathUrl    资源文件路径地址（其中包含文件名称）
     */
    InputStream downloadFile(String storeFlag, String bucketName, String pathUrl);

    /**
     * 文件删除
     *
     * @param pathUrl 全路径
     */
    void delete(String storeFlag, String bucketName, String pathUrl);


    /**
     * 批量文件删除
     *
     * @param pathUrls 全路径集合
     */
    void deleteBatch(String storeFlag, String bucketName, List<String> pathUrls);

    /**
     * 获取文件文本内容
     *
     * @param pathUrl 全路径
     */
    String getFileContent(String storeFlag, String bucketName, String pathUrl);

    /**
     * 获取文件可读路径
     *
     * @param pathUrl 全路径
     */
    String getReadablePath(String storeFlag, String bucketName, String pathUrl);
}
